package br.org.acessobrasil.portal.vista;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletContext;

import org.apache.log4j.Logger;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import br.org.acessobrasil.portal.facade.ItemConteudoFacade;
import br.org.acessobrasil.portal.filtro.Filtro;
import br.org.acessobrasil.portal.modelo.Conteudo;
import br.org.acessobrasil.portal.modelo.ItemConteudo;
import br.org.acessobrasil.portal.modelo.Pagina;


/**
 * Classe responsavel por fazer os links do arquivo, como de um blog
 * eg. Mes 10
 * @author fabio
 *
 */
@Transactional(readOnly=true)
public class ArquivoDeItemConteudo {
	private static Logger logger = Logger.getLogger(ArquivoDeItemConteudo.class);
	private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
	
	/**
	 * Gera uma pagina temporaria com os arquivos<br>
	 * Exemplo para marcar o template:<br>
	 * <code>
	 * Gerenciador.TIPO_CONTEUDO_ARQUIVO_DE_ITEM = "CMS-Arquivos"<br>
	 * &lt;!-- ini tipo conteudo(Gerenciador.TIPO_CONTEUDO_ARQUIVO_DE_ITEM) --&gt;<br>
	 * &aacute;rea para ser substituida.<br>
	 * &lt;!-- fim tipo conteudo(Gerenciador.TIPO_CONTEUDO_ARQUIVO_DE_ITEM) --&gt;<br>
	 * </code>
	 * @param nuConteudo numero do conteudo
	 * @param servletContext
	 * @return Pagina referente ao conteudo
	 */
	public Pagina verArquivosDeItens(Long nuConteudo,ServletContext servletContext){
		
		StringBuilder listaUlDatas = new StringBuilder();
		listaUlDatas.append("<ul>\n");
		WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
		ItemConteudoFacade itemConteudoFacade =(ItemConteudoFacade)webApplicationContext.getBean("itemConteudoFacade");
		List<Date> datas = itemConteudoFacade.verTodosArquivos(nuConteudo);
		Conteudo conteudo = itemConteudoFacade.buscarConteudo(nuConteudo);
		for(Date data:datas){
			listaUlDatas.append("\t<li><a href=\"arq-");
			listaUlDatas.append(simpleDateFormat.format(data));
			listaUlDatas.append("-");
			listaUlDatas.append(Filtro.criarLabel(conteudo.getNoConteudo()));
			listaUlDatas.append("-");
			listaUlDatas.append(conteudo.getNuConteudo());
			listaUlDatas.append(".htm\">");
			listaUlDatas.append(formatarData(data));
			listaUlDatas.append("</a></li>\n");
		}
		listaUlDatas.append("</ul>\n");
		logger.debug("Uls " + listaUlDatas.toString());
		//Criar uma pagina de arquivo
		Pagina pagina = itemConteudoFacade.gerarPaginaArquivoItemConteudo(nuConteudo,listaUlDatas.toString());
		pagina.setUrlArquivo("arqs-"+Filtro.criarLabel(conteudo.getNoConteudo())+"-"+conteudo.getNuConteudo()+".htm");
		return pagina;
	}
	private String formatarData(Date data){
		String[] meses = new String[]{
				"Janeiro",
				"Fevereiro",
				"Mar&ccedil;o",
				"Abril",
				"Maio",
				"Junho",
				"Julho",
				"Agosto",
				"Setembro",
				"Outubro",
				"Novembro",
				"Dezembro"
		};
		String par[] = simpleDateFormat.format(data).split("-");
		int nMes = Integer.parseInt(par[1])-1;
		return meses[nMes] + ", " + par[0];
	}
	
	public Pagina verArquivosDoMes(Long nuConteudo, String ano, String mes, ServletContext servletContext) throws Exception {
		WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
		ItemConteudoFacade itemConteudoFacade =(ItemConteudoFacade)webApplicationContext.getBean("itemConteudoFacade");
		List<ItemConteudo> itens = itemConteudoFacade.buscarItensConteudo(nuConteudo,ano,mes);
		Conteudo conteudo = itemConteudoFacade.buscarConteudo(nuConteudo);
		StringBuilder sbItens = new StringBuilder();
		sbItens.append("\n<ul>");
		for(ItemConteudo item:itens){
			sbItens.append("\t<li><a href=\"item-");
			sbItens.append(Filtro.criarLabel(item.getNoTitulo()));
			sbItens.append("-");
			sbItens.append(item.getConteudo().getPagina().getNuPadraoApresentacao());
			sbItens.append("-");
			sbItens.append(item.getNuItemConteudo());
			sbItens.append("-");
			sbItens.append(item.getConteudo().getPagina().getNuPagina());
			sbItens.append(".htm\">");
			sbItens.append(item.getNoTitulo());
			sbItens.append("</a></li>\n");
		}
		sbItens.append("\n</ul>");
		//Criar uma pagina de arquivo
		Pagina pagina = itemConteudoFacade.gerarPaginaArquivoItemConteudo(nuConteudo,sbItens.toString());
		pagina.setUrlArquivo("arqs-"+Filtro.criarLabel(conteudo.getNoConteudo())+"-"+conteudo.getNuConteudo()+".htm");
		return pagina;
	}
}
